import React from 'react';
import {Alert, Linking, Platform,} from 'react-native';

import {checkUpdate, downloadUpdate, markSuccess, switchVersion, switchVersionLater,} from 'react-native-update';

import _updateConfig from '../../../update.json';
import * as BizConstant from "../constant/BizContant";
import L from "../../lib.xjs/util/L";
import * as ToastAndroid from "react-native/Libraries/Components/ToastAndroid/ToastAndroid.android";

const {appKey} = _updateConfig[Platform.OS];

/**
 * -------------------------------版本更新------------------------------------------
 *
 * BizConstant.ISREALSE
 *
 * 当false时(测试版):
 * 1. 检测到新的[原生版本]时:
 *      1) 当含有[force]时[强制]更新;       ---------------(一直提示更新,不进系统)
 *      2) 否则[选择]更新;                ---------------(只提示一次, 除非主动监测新版本)
 * 2. 检测到新的[热更新版本]时
 *      1) 当含有[force]时[强制]更新;       ---------------(立即更新,完成之后重启)
 *      2) 否则[选择]更新;                ---------------(只提示一次, 除非主动监测新版本)
 *
 * 当true时(正式版,发布版):
 * 1. 检测到的新的[原生版本]时, 只当以[RC], [release]结尾时:
 *      1) 当含有[force]时[强制]更新;       ---------------(一直提示更新,不进系统)
 *      2) 否则[选择]更新;                ---------------(只提示一次, 除非主动监测新版本)
 * 2. 检测到的新的[热更新版本]时, 只当以[RC], [release]结尾时:
 *      1) 当含有[force]时[强制]更新;       ---------------(立即更新,完成之后重启)
 *      2) 否则[选择]更新;                ---------------(只提示一次, 除非主动监测新版本)
 */
export default class VersionCheckHelper {

    /**
     * 是否可以进入主页面
     */
    _mCallBack: Function;

    constructor() {}

    /**
     * 检查新版本
     * @param callback 是否可进主页面
     */
    checkUpdate = (callback : Function) => {
        this._mCallBack = callback;
        markSuccess();

        checkUpdate(appKey).then(info => {
            console.log("-----------info--------------");
            console.log(info);

            if (info.upToDate) {        // 已是最新版本
                // Alert.alert('提示', '您的应用版本已是最新.');
                console.log("您的应用版本已是最新");
                callback(true);     // 可进主页面
            }
            else if (info.expired) {    // 原生新版本
                if(info.downloadUrl.search(BizConstant.FORCE_UPDATE_KEYWORD) !== -1) {  // 强制更新
                    callback(false);    // 不可进主页面
                    Alert.alert('提示', '检测到新的应用版本[强制更新],请下载', [
                        {
                            text: '确定', onPress: () => {
                                info.downloadUrl && Linking.openURL(info.downloadUrl)
                            }
                        },
                    ]);
                }
                else{
                    callback(true);     // 可进主页面
                    Alert.alert('提示', '检测到应用新版本,现在下载?', [
                        {
                            text: '确定', onPress: () => {
                                info.downloadUrl && Linking.openURL(info.downloadUrl);
                            }
                        },
                        {
                            text: '取消',
                        },
                    ]);
                }
            } else {                    // 热更新新版本
                console.log(info);
                if(info.name.search(BizConstant.FORCE_UPDATE_KEYWORD) !== -1) {  // 强制更新
                    ToastAndroid.show("检查到新的版本, 正在升级", ToastAndroid.SHORT);
                    callback(false);    // 不可进主页面
                    this.doUpdate(info)
                }
                else{
                    callback(true);     // 可进主页面
                    Alert.alert('提示', '检查到新的版本' + info.name + ',是否下载?\n' + info.description, [
                        {
                            text: '是', onPress: () => {
                                this.doUpdate(info)
                            }
                        },
                        {text: '否',},
                    ]);
                }
            }
        }).catch(err => {
            callback(true);     // 可进主页面
            ToastAndroid.show("更新失败", ToastAndroid.SHORT);
        });
    };

    /** 下载新版本 */
    doUpdate = info => {
        downloadUpdate(info).then(hash => {
            if(info.name.search(BizConstant.FORCE_UPDATE_KEYWORD) !== -1) {  // 强制更新
                ToastAndroid.show("下载完毕,正在重启应用", ToastAndroid.SHORT);
                switchVersion(hash);
            }
            else{
                Alert.alert('提示', '下载完毕,是否重启应用?', [
                    {
                        text: '是', onPress: () => {
                            switchVersion(hash);
                        }
                    },
                    {text: '否',},
                    {
                        text: '下次启动时', onPress: () => {
                            switchVersionLater(hash);
                        }
                    },
                ]);
            }

        }).catch(err => {
            callback(true);     // 可进主页面
            ToastAndroid.show("下载失败", ToastAndroid.SHORT);
        });
    };
}
